/*
* 样例解释：
* 按照  T {1 3} {4} {2 1}
*       C {3 2} {3} {3 4}划分
* 完成时间{5 5} {10} {14 14} 1+1+3 5+1+4 10+1+2+1
* 费用    (3+2)*5 3*10 (3+4)*14
*/
#include <iostream>
#include <cstring>
#define int long long
using namespace std;
// #define ONLINE_JUDGE
const int N = 5010;

int n,s; 

int ts[N], cs[N];
int dp[N];

signed main()
{
    #ifdef ONLINE_JUDGE

    #else
    freopen("./in.txt","r",stdin);
    #endif
    ios::sync_with_stdio(false);
	cin.tie(0);

    cin >> n >> s;

    for(int i = 1; i <= n; i++)
    {
        cin >> ts[i] >> cs[i];
        ts[i] += ts[i-1]; cs[i] += cs[i-1];
    }

    memset(dp, 0x3f, sizeof dp);
    dp[0] = 0;

    for(int i = 1; i <= n; i++)
        for(int j = 0; j < i; j++)
            dp[i] = min(dp[i], dp[j] + ts[i] * (cs[i] - cs[j]) + s * (cs[n] - cs[j])); 
                        // 第j个任务的划分对后面任务启动时间的拖延 + 后面任务启动时间*费用系数
    
    cout << dp[n] << endl;
    return 0;
}
